/* 
 * 	This file is part of VPN Monitor Project 7..

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package monitor;

import java.util.TimerTask;

import monitor.interfaces.TrafficDataPackage;
import monitor.interfaces.TrafficPackage;
import monitor.interfaces.observers.TrafficObserver;
import monitor.utility.Utility;

class Watcher extends TimerTask implements TrafficObserver{
	private String interfaceName = null;
	private boolean limitReached = false;
	private Monitor monitor = null;
	
	Watcher(Monitor monitor, String interfaceName){
		this.monitor = monitor;
		monitor.addTrafficObserver(this);
		this.interfaceName = interfaceName;
	}
	
	Watcher(Watcher watch){
		interfaceName = watch.interfaceName;
		limitReached = watch.limitReached;
		monitor = watch.monitor;
	}
	
	void changeInterfaceName(String interfaceName){
		this.interfaceName = interfaceName;
	}
	
	@Override
	public void run() {
		if(!Utility.checkInterface(this.interfaceName) || limitReached)
			monitor.halt(limitReached ? "Limit reached" : "Connection for "+interfaceName+" was lost");
	}

	@Override
	public void trafficUpdated(TrafficPackage[] traffic) {
		limitReached = false;
		for(TrafficPackage t : traffic)
			for(TrafficDataPackage d : t.getValues())
				if(d.isLimit() && d.getTraffic() > d.getLimit())
					limitReached = true;
	}
}
